namespace practiceCourse3 { 
  function generateMatrix(n: number): number[][] {
    let loop = Math.floor(n / 2); // 循环几圈
    let offset = 1; // 偏移量
    let mid = Math.floor(n / 2); // 中心点位置
    let startRow = 0, startCol = 0; // 每圈的起始位置
    let i, j; // 行列指针
    let count = 1; // 计数器
    let res = new Array(n).fill(undefined).map(() => new Array(n))
    while (loop--) {
      i = startRow;
      j = startCol;

      // 填充上行
      for (; j < n - offset; j++) {
        res[i][j] = count++
      }
      // 填充右列
      for (; i < n - offset; i++) {
        res[i][j] = count++
      }
      // 填充下行
      for (; j > startCol; j--) {
        res[i][j] = count++
      }
      // 填充左列
      for (; i > startRow; i--) {
        res[i][j] = count++
      }

      // 一圈结束，更新指针，偏移量
      startRow++
      startCol++
      offset++
    }

    if (n % 2) {
      res[mid][mid] = count
    }

    return res
  }
}